package com.uujava.minibox.ui.combobox;

import java.awt.*;
import java.awt.event.*;
import java.io.File;
import javax.swing.*;

import com.mxcyk.serviceLogic.DriveList;
import com.mxcyk.serviceLogic.Run;
import com.uujava.minibox.ui.button.ImageJButton;
/**
 * 功能：快速分区访问&搜索
 *  当前搜索内容:jobsBox.getSelectedItem().toString为空值时会报错
 *  还有就是出发按钮的以一并出发了jobsBox
 * 使用方法： 功能：搜索和分区快速访问
 * 
 * @param hgap
 *            控件间的水平间距
 * @param vgap
 *            控件间的垂直间距
 * @param url
 *            使用的搜索引擎的搜索代码
 * @param disk
 *            系统内可以使用的分区列表
 * @param iconPath
 *            搜索按钮的显示图片
 * @param iconWidth
 *            搜索按钮的默认高度
 * @param iconHeight
 *            搜索按钮的默认宽度
 * @author k 
 * 日期：2012-8-10
 */
final public class DiskComboBox extends JPanel {
	private static final long serialVersionUID = -5933041769198601824L;
	File[] drive = null;//分区列表
	ImageJButton ijb = null;//搜索按钮
	String url = null;
	private JComboBox<?> driveLs;
	String defaultOpenURL="http://www.baidu.com/";//在无搜索内容时默认访问的url
	public String getDefaultOpenURL() {
		return defaultOpenURL;
	}

	public void setDefaultOpenURL(String defaultOpenURL) {
		this.defaultOpenURL = defaultOpenURL;
	}

	/**
	 * 功能：搜索和分区快速访问
	 * @param hgap 控件间的水平间距
	 * @param vgap 控件间的垂直间距
	 * @param url 使用的搜索引擎的搜索代码
	 * @param iconPath 搜索按钮的显示图片
	 * @param iconWidth 搜索按钮的默认高度 
	 * @param iconHeight 搜索按钮的默认宽度
	 */
	public DiskComboBox(int hgap, int vgap, String url, String iconPath,
			int iconWidth, int iconHeight) {
		this.setLayout(new BorderLayout(hgap, vgap));
		this.setPreferredSize(new Dimension(iconWidth, iconHeight));//设置默认大小

		
		this.url = url;
		// ==============================================================
		ijb = new ImageJButton(iconPath, iconWidth, iconHeight);
		ijb.setToolTipText("搜索");
		ijb.addActionListener(new ButtonGetAction());
		// ==============================================================
		DriveList dskls = new DriveList();
		drive = dskls.getRoots();// 获得分区的列表
		driveLs = getDriveComboBox(drive);// 新建组合框
		driveLs.addItemListener(new ComboGetAction());// 增加事件监听器
		// ==============================================================
		this.add(driveLs, BorderLayout.CENTER);
		this.add(ijb, BorderLayout.EAST);

	}

	short[] index;// 保存已知可用分区
	// 通过传入分区为box添加下拉内容
	private JComboBox<String> getDriveComboBox(File[] drive) {
		JComboBox box = new JComboBox();
		box.setEditable(true);// 可以编辑下拉列表的内容

		int j = 0;
		index = new short[drive.length];// 用来记录可用的分区下标
		for (int i = 0; i < drive.length; i++) {
			if (drive[i].canRead() == true) {// 获得可以使用的分区
				index[j] = (short) i;
				box.insertItemAt(drive[i].getPath(), j++);
				/*
				 * 此处为combobox显示的drive[i].getPath()+“卷标” 可以为此初添加驱动器的卷标功能
				 */

			}

		}
		
		return box;
	}

	// 事件监听器
	private class ComboGetAction implements ItemListener {
		@Override
		// 对驱动器打开处理
		public void itemStateChanged(ItemEvent e) {
			// TODO Auto-generated method stub

			if (driveLs.getSelectedIndex() >= 0) {
				short indx = index[driveLs.getSelectedIndex()];// 获得访问drive数组下标
				// System.out.println("访问的驱动器为："+drive[indx].getPath());
				Run run = Run.getRun();// 获得打开执行类
				run.runOpen(drive[indx]);// 执行打开操作
				driveLs.setSelectedItem("");// 设置显示为空
			}

		}
	}

	// ===================================================================================
	private class ButtonGetAction implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			/* System.out.print(url); */
			// ============================================
			Object selectedJob = driveLs.getSelectedItem();
			String str = (String) selectedJob;
			if (str != null) {// comboBox内不能为空
				// 使用的搜索引擎+关键词
				java.net.URI ur = java.net.URI.create(url
						+ driveLs.getSelectedItem().toString());
				Run run = Run.getRun();
				run.runURI(ur);// 打开搜索网页
			}else{
				//打开默认网页
				java.net.URI def = java.net.URI.create(defaultOpenURL);
				Run run = Run.getRun();
				run.runURI(def);// 打开搜索网页
			}
			// ================================================

		}

	}

	// ===================================================================================

	public static void main(String[] args) {
		JFrame jf = new JFrame();
		String Path = System.getProperty("user.dir");// 获得当前路径
		DiskComboBox mo = new DiskComboBox(1, 5, "http://baidu.com",
				"/images/bookmark_tab_icon.png", 26, 26);
		jf.add(mo);
		jf.setSize(300, 200);
		jf.setVisible(true);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	
}